package cn.swing.his.user.service;

import cn.swing.his.pojo.user.dto.ChangeRoleOperationDTO;
import cn.swing.his.pojo.user.dto.DoctorDetailsDTO;
import cn.swing.his.pojo.user.dto.PatientOrderDTO;
import cn.swing.his.pojo.user.dto.PatientRegisterDTO;
import cn.swing.his.pojo.user.vo.*;

import java.util.List;

public interface IUserService {
    /**
     * 返回所有患者列表信息
     *
     * @return
     */
    List<PatientListVO> patientList();


    /**
     * 返回所有所有医生列表信息
     *
     * @return
     */
    List<DoctorListVO> doctorList(Integer roomId);


    /**
     * 根据医生ID删除单个医生信息
     *
     * @return
     */
    void deleteSimpleDoctorById(Integer id);

    /**
     * 根据患者ID删除单个患者信息
     *
     * @return
     */
    void deleteSimplePatientById(Integer id);

    /**
     * 插入单个医生信息
     *
     * @return
     */
    void insertSimpleDoctor(DoctorDetailsDTO doctorDetailsDTO);


    /**
     * 根据医生ID更新医生信息
     *
     * @param doctorDetailsDTO
     */
    void updateSimpleDoctorDetailsById(DoctorDetailsDTO doctorDetailsDTO);


    /**
     * 插入病人预约情况信息
     *
     * @param patientOrderDTO
     */
    void insertPatientOrder(PatientOrderDTO patientOrderDTO);


    /**
     * 根据医生身份证号获取单个医生所有个人信息
     *
     * @param idCard
     * @return
     */
    DoctorDetailsVO selectSimpleDoctorDetails(String idCard);

    /**
     * 根据病人身份证号获取单个病人所有个人信息
     *
     * @param idCard
     * @return
     */
    PatientDetailsVO selectSimplePatientDetails(String idCard);

    /**
     * 根据患者身份证号查询该患者的所有病历信息
     *
     * @param idCard
     * @return
     */
    List<MedicalRecordVO> selectMedicalRecordList(String idCard);


    /**
     * 返回科室中所有列表信息
     *
     * @return
     */
    List<RoomListVO> selectRoomList();


    /**
     * 查询出所有角色列表信息
     *
     * @return
     */
    List<RoleListVO> selectRoleList();


    /**
     * 插入单个角色信息
     *
     * @param name
     */
    void insertRole(String name);


    /**
     * 根据角色ID删除单个角色信息
     *
     * @param id
     */
    void deleteRoleById(Integer id);

    /**
     * 查出权限表所有权限列表信息
     *
     * @return
     */
    List<PermissionListVO> selectPermissionList();

    /**
     * 根据医生ID查询医生姓名
     *
     * @param id
     * @return
     */
    DoctorSimpleVO selectDoctorNameById(Integer id);


    /**
     * 根据ID批量删除医生列表信息
     *
     * @param ids
     */
    void deleteDoctorsByIds(Integer[] ids);


    /**
     * 根据ID批量删除病人列表信息
     *
     * @param ids
     */
    void deletePatientsByIds(Integer[] ids);


    /**
     * 根据ID修改医生个人密码
     *
     * @param id
     */
    void updateDoctorPasswordById(Integer id, String password);


    /**
     * 根据病人ID返回病人预约信息
     *
     * @param id
     * @return
     */
    List<OrderDetailsVO> orderDetailsById(Integer id);


    /**
     * 根据角色ID获取该角色所有权限信息
     *
     * @param id
     * @return
     */
    List<PermissionListVO> permissionListById(Integer id);


    /**
     * 根据角色ID插入角色-操作关联信息
     *
     * @param changeRoleOperations
     * @return
     */
    int changeRoleOperation(List<ChangeRoleOperationDTO> changeRoleOperations);



    /**
     * 患者注册
     *
     * @param patientRegisterDTO
     */
    void registerPatient(PatientRegisterDTO patientRegisterDTO);




    /**
     * 根据医生id查看不同角色下不同的导航栏菜单
     *
     * @param id
     * @return
     */
    List<DoctorMenuVO> selectDoctorMenuById(Integer id);


    /**
     * 根据科室ID查询单个科室详细信息
     *
     * @param id
     * @return
     */
    RoomDetailsVO selectRoomDetailById(Integer id);
}
